home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 8: LINUX Games / Linux Cubed Series 8 - LINUX Games.iso / games / x11 / strategy / xsok-1.000 / xsok-1 / xsok-1.01 / src / xsok.h < prev    next >
C/C++ Source or Header  |  1995-11-03  |  9KB  |  343 lines

  1. /*****************************************************************************/
  2. /*                                         */
  3. /*                                         */
  4. /*    Xsok version 1.00 -- module xsok.h                     */
  5. /*                                         */
  6. /*    This file is included by all sources of xsok.                 */
  7. /*    Written by Michael Bischoff (mbi@mo.math.nat.tu-bs.de)             */
  8. /*    November-1994                                 */
  9. /*    see COPYRIGHT.xsok for Copyright details                 */
  10. /*                                         */
  11. /*                                         */
  12. /*****************************************************************************/
  13. #include <stdio.h>
  14. #include <string.h>
  15. #include <stdlib.h>
  16. #include <stdarg.h>
  17. #include <time.h>
  18.  
  19. /* defaults for user configurable directories */
  20. #ifndef XSOKDIR        /* directory where to get the game data files */
  21. #define XSOKDIR        "/usr/games/lib/xsok"
  22. #endif
  23. #ifndef XSOKSAVE    /* directory where to save moves of solved levels */
  24. #define XSOKSAVE    "/var/games/xsok"
  25. #endif
  26.  
  27. #define MAXSAVEFILELEN    200    /* pathname length including trailing zero */
  28. #define MAXXSOKDIRLEN     99    /* pathname length of the xsok directory */
  29. #define MAXFILENAMELEN     30    /* filename length of keyboard and message file */
  30.  
  31. /* maximum board dimensions, inclusive outer borders (tunable) */
  32. #define MAXCOL          32    /* max x dim. */
  33. #define MAXROW          22    /* max y dim. */
  34. /* other maximum settings (tunable) */
  35. #define MAXWALLS    32    /* max. different floor types */
  36. #define MAXOBJECTS    32    /* max. different object types */
  37. #define MAXINSTANCES    256    /* max. number of objects */
  38.  
  39. /* global string variables */
  40. extern char username[256];   /* which user to blame for success                    */
  41. extern const char *savedir;  /* in which directory should saved games be stored (XSOKSAVE)    */
  42. extern const char *xsokdir;  /* from which directory to read the level files (default: XSOKDIR) */
  43. extern const char *langdir;        /* a string (empty?) defining the language */
  44. extern const char *rulepool[16];
  45. extern int highscore[300];
  46. extern int pushcost;
  47. extern int movecost;
  48. extern void (*lastcmd)(void);
  49. extern int numeric_arg;
  50.  
  51. #ifndef EXIT_FAILURE    /* poor old SUN's */
  52. #define EXIT_FAILURE (-1)
  53. #endif
  54.  
  55. #ifndef max
  56. #define max(a, b)     ((a) > (b) ? (a) : (b))
  57. #define min(a, b)     ((a) < (b) ? (a) : (b))
  58. #endif
  59.  
  60. typedef int boolean;            /* just one bit of information           */
  61. struct key_action {
  62.     char *string;
  63.     void (*action)(void);
  64.     struct key_action *next;
  65. };
  66.  
  67. #define True        1
  68. #define False        0
  69.  
  70. #if 0
  71. /* obsolete */
  72. #define XSOK1MAGIC1    0xb5
  73. #define XSOK1MAGIC2    0xa0
  74. #define ARR_UP        0x100
  75. #define ARR_LEFT    0x101
  76. #define ARR_DOWN    0x102
  77. #define ARR_RIGHT    0x103
  78.  
  79. #endif
  80.  
  81. #define Disable 0
  82. #define Enable    1
  83. #define EnableAndRedraw 2
  84.  
  85.  
  86. struct walls {
  87.     int chr;    /* character for representation        */
  88.     int pic;    /* picture number            */
  89.     int enter;
  90.     int leave;
  91.     int mask;
  92.     int effect;
  93. };
  94.  
  95. /* definitions for the effect field */
  96. /* all effects plus 100: square will turn to normal floor if touched. */
  97. #define E_ONCE        100    /* add this to make one-time effects */
  98. #define E_NOTHING    0
  99. #define E_TURN_CCW    1
  100. #define E_TURN_180    2
  101. #define E_TURN_CW    3
  102. #define E_DEST        4    /* no effect, but required by finished() */
  103. #define E_EXIT        5    /* dito */
  104. #define E_ADDPOWER    6
  105. #define E_SUBPOWER    7
  106. #define E_TELEPORT    8
  107.  
  108. /* addstrength, teleporters */
  109.  
  110. struct objects {
  111.     int chr;    /* character for representation        */
  112.     int pic;    /* picture number            */
  113.     int movedir;
  114.     int pushdir;
  115.     int weight;
  116.     int power;
  117.     int mask;
  118.     int score;
  119. };
  120.  
  121. struct game {
  122.     int numrows;    /* game size */
  123.     int numcols;
  124.     int x;        /* player pos */
  125.     int y;
  126.     int n_pushes;    /* counter */
  127.     int n_moves;
  128.     int stored_moves;
  129.     int bookmark;
  130.     int finished;
  131.     int level;
  132.     int score;
  133.     const char *type;
  134.     int macroStart, macroEnd;
  135.     int macro_x, macro_y;
  136. };
  137.  
  138.  
  139. extern char levelcomment[100];
  140. extern char levelauthor[100];
  141. extern int gamegraphic;
  142. extern int maxlevel;        /* maximum level number for this type of game */
  143. extern int nwalls, nobjects, ninstances;
  144. extern struct objects objects[MAXOBJECTS];
  145. extern struct walls walls[MAXWALLS];    /* wall types */
  146. extern struct game game;
  147. extern struct walls *map[MAXROW][MAXCOL];
  148. extern struct objects *obj[MAXROW][MAXCOL];
  149. extern struct objects instance[MAXINSTANCES];
  150. extern char *movetab;
  151. extern int numalloc;
  152.  
  153.  
  154. /* function prototypes */
  155. /* parse.c */
  156. void ParseDefinitionFile(void);    /* read definitions */
  157. void ParseMapFile(void);    /* read a level */
  158. void OrgLevel(void);        /* restart game */
  159.  
  160. /* tools.c */
  161. void fatal(const char *, ...);
  162. void *malloc_(size_t);
  163. void *calloc_(size_t, size_t);
  164. void *realloc_(void *, size_t);
  165. void free_(void *);
  166. char *strsav(const char *);
  167.  
  168. /* main.c */
  169. void change_rules(const char *);
  170. int compute_score(void);
  171. int finished(void);
  172.  
  173. /* move.c */
  174. #if 0
  175. void savegame(const char *);
  176. int loadgame(const char *);
  177. #endif
  178. void graphics_control(int);
  179. void playermove(int);
  180. #if 0
  181. void restart(void);
  182. int redo_move(void);
  183. int undo_move(void);
  184. #endif
  185.  
  186. /* username.c */
  187. void buildusername(const char *);
  188.  
  189. /* messages.c */
  190. void read_message_file(const char *);
  191. void add_keybinding(struct key_action **, const char *, const char *);
  192. void read_keyboard_file(const char *);
  193. void key_pressed(char *);
  194.  
  195. /* loadsave.c */
  196. void cmd_ReadHighscores(void);
  197. void WriteHighscores(void);
  198. void switch_uid(int);
  199. void setlangdir(void);
  200. void load_game(const char *);
  201. void save_game(const char *);
  202. void link_game(const char *, const char *);
  203.  
  204. /* commands.c */
  205. void cmd_Up(void);
  206. void cmd_Left(void);
  207. void cmd_Down(void);
  208. void cmd_Right(void);
  209. void cmd_Repeat(void);
  210. void cmd_LevelInfo(void);
  211. void cmd_NextUnsolved(void);
  212. void cmd_NextLevel(void);
  213. void cmd_PrevLevel(void);
  214. void rq_LeaveSok(void);
  215. void rq_RestartGame(void);
  216. void rq_PrevLevel(void);
  217. void rq_NextLevel(void);
  218. void rq_NextUnsolved(void);
  219. void cmd_DropBookmark(void);
  220. void jumpto_movenr(int);
  221. void cmd_RestartGame(void);
  222. void cmd_GotoBookmark(void);
  223. void cmd_SaveGame(void);
  224. void cmd_ShowVersion(void);
  225. void cmd_ShowScore(void);
  226. void cmd_ShowBestScore(void);
  227. void cmd_ShowAuthor(void);
  228. void cmd_ReplayGame(void);
  229. void cmd_LoadGame(void);
  230. void cmd_UndoMove(void);
  231. void cmd_RedoMove(void);
  232.  
  233. extern const char *xsok_messages[];
  234. #define TXT_QUIT_CONFIRM    (xsok_messages[0])
  235. #define TXT_NEW_CONFIRM        (xsok_messages[1])
  236. #define TXT_RESTART_CONFIRM    (xsok_messages[2])
  237. #define TXT_NEXT_CONFIRM    (xsok_messages[3])
  238. #define TXT_PREV_CONFIRM    (xsok_messages[4])
  239. #define TXT_MOVENOTPOSSIBLE    (xsok_messages[5])
  240. #define TXT_BOOKMARK_SET    (xsok_messages[6])
  241. #define TXT_YOU_WIN        (xsok_messages[7])
  242. #define TXT_OK            (xsok_messages[8])
  243. #define TXT_VERSION        (xsok_messages[9])
  244. #define TXT_SCORE        (xsok_messages[10])
  245. #define TXT_NOUNDO        (xsok_messages[11])
  246. #define TXT_UNDO        (xsok_messages[12])
  247. #define TXT_NOREDO        (xsok_messages[13])
  248. #define TXT_REDO        (xsok_messages[14])
  249. #define TXT_WELCOME        (xsok_messages[15])
  250.  
  251. #define TXT_SAVE_ERR_BASIC    (xsok_messages[16])
  252. #define TXT_LOAD_ERR_BASIC    (xsok_messages[17])
  253. #define TXT_SAVE_ERR_OPEN    (xsok_messages[18])
  254. #define TXT_LOAD_ERR_OPEN    (xsok_messages[19])
  255. #define TXT_SAVE_ERR_HEADER    (xsok_messages[20])
  256. #define TXT_LOAD_ERR_HEADER    (xsok_messages[21])
  257. #define TXT_SAVE_ERR_MOVES    (xsok_messages[22])
  258. #define TXT_LOAD_ERR_MOVES    (xsok_messages[23])
  259. #define TXT_SAVE_OK        (xsok_messages[24])
  260. #define TXT_LOAD_OK        (xsok_messages[25])
  261. #define TXT_LOAD_ERR_BADMAGIC    (xsok_messages[26])
  262.  
  263. #define TXT_NOAUTHOR        (xsok_messages[27])
  264. #define TXT_NEWHIGH        (xsok_messages[28])
  265. #define TXT_NOLOAD        (xsok_messages[29])
  266. #define TXT_HELP_KEYS        (xsok_messages[30])
  267. #define TXT_HELP_RULES        (xsok_messages[31])
  268.  
  269. #define TXT_STARTMACRO        (xsok_messages[32])
  270. #define TXT_ENDMACRO        (xsok_messages[33])
  271. #define TXT_MACRO_BADPOS    (xsok_messages[34])
  272. #define TXT_UNSOLVED_CONFIRM    (xsok_messages[35])
  273. #define TXT_BEST        (xsok_messages[36])
  274. #define TXT_UNSOLVED        (xsok_messages[37])
  275. #define TXT_SAVE_ERR_LINK    (xsok_messages[38])
  276.  
  277.  
  278. /* Xaw-help.c */
  279. /*
  280. void create_help(Widget);
  281. void popup_help(void);
  282. void popdown_help(Widget, XtPointer, XtPointer);
  283. */
  284.  
  285. /* Xaw-main.c */
  286. void show_message(const char *str, ...);
  287. void SetTitle(void);
  288. void cmd_LeaveSok(void);
  289. void cmd_Confirm(void);
  290. void cmd_Cancel(void);
  291. void request_confirm(void (*)(void), const char *);
  292. #ifdef SOUND
  293. int checksound(void);
  294. #endif
  295. int main(int argc, char *argv[]);
  296. /* void Force_Resize(XSize_t, XSize_t); */
  297.  
  298. /* X-widget.c */
  299. /* void AskWidgetForResize(XSize_t, XSize_t); */
  300.  
  301. /* X-events.c */
  302. void refresh_screen(void);
  303. /* void button_press(XButtonPressedEvent *);
  304. void key_press(XKeyPressedEvent *); */
  305. void cmd_Resize(void);
  306. /* void resize_event(XSize_t, XSize_t); */
  307.  
  308. /* X-gfx.c */
  309. void sync_and_wait(void);
  310. void NewLevel(int);
  311. void init_layout(void);
  312. void init_gfx(const char *);
  313. /* void dotPaint(int, int, int, int); */
  314. void doPaint(int, int, int, int);
  315. /* void redraw_table(XExposeEvent *); */
  316.  
  317.  
  318. #if SOUND
  319. /* X-sound_SUN.c */
  320. int checksound(void);
  321. void play_sound(const char *);
  322. #else
  323. #define play_sound(x)
  324. #endif
  325.  
  326. /* dummy.c */
  327. void cmd_debug(void);
  328.  
  329. /* xfopen.c */
  330. FILE *zreadopen(const char *filename);
  331. void zreadclose(FILE *fp);
  332.  
  333. /* mousemove.c */
  334. void cmd_MouseUndo(void);
  335. void cmd_MouseMove(void);
  336. void cmd_MousePush(void);
  337.  
  338. extern int mouse_x, mouse_y;
  339.  
  340. void cmd_StartMacro(void);
  341. void cmd_EndMacro(void);
  342. void cmd_PlayMacro(void);
  343.